\hypertarget{hash-afinidades_8h}{
\section{Referência ao ficheiro hash-afinidades.h}
\label{hash-afinidades_8h}\index{hash-afinidades.h@{hash-afinidades.h}}
}
Arquivo responsável por gerenciar as afinidades entre os clientes e os servidores do \hyperlink{structcluster}{cluster} L2LB. 

{\tt \#include $<$linux/jhash.h$>$}\par
\subsection*{Estruturas de Dados}
\begin{CompactItemize}
\item 
struct \hyperlink{structnlb__affinity}{nlb\_\-affinity}
\begin{CompactList}\small\item\em Afinidade entre um cliente e um servidor do \hyperlink{structcluster}{cluster}. \item\end{CompactList}\item 
struct \hyperlink{structnlb__affinity__hash__table}{nlb\_\-affinity\_\-hash\_\-table}
\begin{CompactList}\small\item\em Tabela HASH para gerenciar a afinidade entre um cliente e um servidor. \item\end{CompactList}\end{CompactItemize}
\subsection*{Funções}
\begin{CompactItemize}
\item 
static u32 \hyperlink{hash-afinidades_8h_62c7e0fab503d9c79c83dcccfc64a7b3}{hash} (u32 $\ast$client\_\-ip)
\begin{CompactList}\small\item\em Funcao HASH. \item\end{CompactList}\item 
static struct \hyperlink{structnlb__affinity}{nlb\_\-affinity} $\ast$$\ast$ \hyperlink{hash-afinidades_8h_1d6892c38b544851c77f57b849dd1890}{hash\_\-alloc} (unsigned int entries)
\begin{CompactList}\small\item\em Aloca na memoria espaco para a tabela HASH. \item\end{CompactList}\item 
static void \hyperlink{hash-afinidades_8h_b8049b9214af4294d4fcd4fdd29b28e1}{hash\_\-init} (void)
\begin{CompactList}\small\item\em Cria a tabela HASH de afinidade. \item\end{CompactList}\item 
static void \hyperlink{hash-afinidades_8h_250cf847fac6e25b8e87545604a1ba60}{hash\_\-exit} (void)
\begin{CompactList}\small\item\em Destroy a tabela de HASH. \item\end{CompactList}\item 
static void \hyperlink{hash-afinidades_8h_28345df54170743bcd16f251ab6e0c58}{hash\_\-grow} (unsigned long new\_\-entries)
\begin{CompactList}\small\item\em Aumenta a capacidade da tabela HASH de afinidades. \item\end{CompactList}\item 
static struct \hyperlink{structnlb__affinity}{nlb\_\-affinity} $\ast$ \hyperlink{hash-afinidades_8h_2d316c6293294b551cb94309a0a70942}{hash\_\-add} (u32 $\ast$client\_\-ip, struct \hyperlink{structcluster__node}{cluster\_\-node} $\ast$node)
\begin{CompactList}\small\item\em Cria uma afinidade entre um cliente e um servidor específico do \hyperlink{structcluster}{cluster}. \item\end{CompactList}\item 
static struct \hyperlink{structnlb__affinity}{nlb\_\-affinity} $\ast$ \hyperlink{hash-afinidades_8h_cd0b9a162ec55cddc882ca2070daf745}{hash\_\-lookup} (u32 $\ast$client\_\-ip)
\begin{CompactList}\small\item\em Procura na tabela HASH por uma afinidade entre um cliente e um servidor. \item\end{CompactList}\item 
void \hyperlink{hash-afinidades_8h_28ab4480aefa945c08a4d1f5e16a8d5e}{hash\_\-remove\_\-node\_\-affinities} (struct \hyperlink{structcluster__node}{cluster\_\-node} $\ast$node)
\begin{CompactList}\small\item\em Remove todas as afinidades de um servidor Metodo usado na hora de remover um servidor do \hyperlink{structcluster}{cluster}. \item\end{CompactList}\end{CompactItemize}
\subsection*{Variáveis}
\begin{CompactItemize}
\item 
struct \hyperlink{structnlb__affinity__hash__table}{nlb\_\-affinity\_\-hash\_\-table} \hyperlink{hash-afinidades_8h_548cda3f82635bd43a0b2b4beeecc8e4}{my\_\-nlb\_\-affinity\_\-hash\_\-table}
\begin{CompactList}\small\item\em Tabela HASH para gerenciar a afinidade entre um cliente e um servidor. \item\end{CompactList}\end{CompactItemize}


\subsection{Descrição detalhada}
Arquivo responsável por gerenciar as afinidades entre os clientes e os servidores do \hyperlink{structcluster}{cluster} L2LB. 



Definido no ficheiro \hyperlink{hash-afinidades_8h-source}{hash-afinidades.h}.

\subsection{Documentação das funções}
\hypertarget{hash-afinidades_8h_62c7e0fab503d9c79c83dcccfc64a7b3}{
\index{hash-afinidades.h@{hash-afinidades.h}!hash@{hash}}
\index{hash@{hash}!hash-afinidades.h@{hash-afinidades.h}}
\subsubsection[hash]{\setlength{\rightskip}{0pt plus 5cm}static u32 hash (u32 $\ast$ {\em client\_\-ip})\hspace{0.3cm}{\tt  \mbox{[}static\mbox{]}}}}
\label{hash-afinidades_8h_62c7e0fab503d9c79c83dcccfc64a7b3}


Funcao HASH. 

\begin{Desc}
\item[Parâmetros:]
\begin{description}
\item[{\em client\_\-ip}]IP do cliente \end{description}
\end{Desc}


Definido na linha 69 do ficheiro hash-afinidades.h.

Referências nlb\_\-affinity\_\-hash\_\-table::hash\_\-random e my\_\-nlb\_\-affinity\_\-hash\_\-table.

Referenciado por hash\_\-add(), hash\_\-grow() e hash\_\-lookup().\hypertarget{hash-afinidades_8h_2d316c6293294b551cb94309a0a70942}{
\index{hash-afinidades.h@{hash-afinidades.h}!hash\_\-add@{hash\_\-add}}
\index{hash\_\-add@{hash\_\-add}!hash-afinidades.h@{hash-afinidades.h}}
\subsubsection[hash\_\-add]{\setlength{\rightskip}{0pt plus 5cm}static struct {\bf nlb\_\-affinity}$\ast$ hash\_\-add (u32 $\ast$ {\em client\_\-ip}, \/  struct {\bf cluster\_\-node} $\ast$ {\em node})\hspace{0.3cm}{\tt  \mbox{[}static, read\mbox{]}}}}
\label{hash-afinidades_8h_2d316c6293294b551cb94309a0a70942}


Cria uma afinidade entre um cliente e um servidor específico do \hyperlink{structcluster}{cluster}. 

\begin{Desc}
\item[Parâmetros:]
\begin{description}
\item[{\em client\_\-ip}]IP do cliente \item[{\em node}]Servidor do \hyperlink{structcluster}{cluster} \end{description}
\end{Desc}


Definido na linha 165 do ficheiro hash-afinidades.h.

Referências nlb\_\-affinity\_\-hash\_\-table::entries, nlb\_\-affinity\_\-hash\_\-table::entry\_\-size, hash(), hash\_\-grow(), nlb\_\-affinity\_\-hash\_\-table::hash\_\-mask, nlb\_\-affinity\_\-hash\_\-table::hash\_\-table, my\_\-nlb\_\-affinity\_\-hash\_\-table, nlb\_\-affinity::next e nlb\_\-affinity\_\-hash\_\-table::rwlock.

Referenciado por nlb\_\-hook\_\-in().\hypertarget{hash-afinidades_8h_1d6892c38b544851c77f57b849dd1890}{
\index{hash-afinidades.h@{hash-afinidades.h}!hash\_\-alloc@{hash\_\-alloc}}
\index{hash\_\-alloc@{hash\_\-alloc}!hash-afinidades.h@{hash-afinidades.h}}
\subsubsection[hash\_\-alloc]{\setlength{\rightskip}{0pt plus 5cm}static struct {\bf nlb\_\-affinity}$\ast$$\ast$ hash\_\-alloc (unsigned int {\em entries})\hspace{0.3cm}{\tt  \mbox{[}static, read\mbox{]}}}}
\label{hash-afinidades_8h_1d6892c38b544851c77f57b849dd1890}


Aloca na memoria espaco para a tabela HASH. 



Definido na linha 77 do ficheiro hash-afinidades.h.

Referências nlb\_\-affinity\_\-hash\_\-table::hash\_\-mask e my\_\-nlb\_\-affinity\_\-hash\_\-table.

Referenciado por hash\_\-grow() e hash\_\-init().\hypertarget{hash-afinidades_8h_250cf847fac6e25b8e87545604a1ba60}{
\index{hash-afinidades.h@{hash-afinidades.h}!hash\_\-exit@{hash\_\-exit}}
\index{hash\_\-exit@{hash\_\-exit}!hash-afinidades.h@{hash-afinidades.h}}
\subsubsection[hash\_\-exit]{\setlength{\rightskip}{0pt plus 5cm}static void hash\_\-exit (void)\hspace{0.3cm}{\tt  \mbox{[}static\mbox{]}}}}
\label{hash-afinidades_8h_250cf847fac6e25b8e87545604a1ba60}


Destroy a tabela de HASH. 



Definido na linha 113 do ficheiro hash-afinidades.h.

Referências nlb\_\-affinity\_\-hash\_\-table::hash\_\-table e my\_\-nlb\_\-affinity\_\-hash\_\-table.

Referenciado por nlb\_\-exit\_\-module().\hypertarget{hash-afinidades_8h_28345df54170743bcd16f251ab6e0c58}{
\index{hash-afinidades.h@{hash-afinidades.h}!hash\_\-grow@{hash\_\-grow}}
\index{hash\_\-grow@{hash\_\-grow}!hash-afinidades.h@{hash-afinidades.h}}
\subsubsection[hash\_\-grow]{\setlength{\rightskip}{0pt plus 5cm}static void hash\_\-grow (unsigned long {\em new\_\-entries})\hspace{0.3cm}{\tt  \mbox{[}static\mbox{]}}}}
\label{hash-afinidades_8h_28345df54170743bcd16f251ab6e0c58}


Aumenta a capacidade da tabela HASH de afinidades. 

OBS.: Nao ha operacoes de lock neste metodo, pois ele eh chamado apenas dentro de hash\_\-add, que ja administra as primitivas de sincronizacao

\begin{Desc}
\item[Parâmetros:]
\begin{description}
\item[{\em new\_\-entries}]Quantidade de entradas que devem ser adicionadas à capacidade da tabela HASH \end{description}
\end{Desc}


Definido na linha 126 do ficheiro hash-afinidades.h.

Referências nlb\_\-affinity::client\_\-ip, hash(), hash\_\-alloc(), nlb\_\-affinity\_\-hash\_\-table::hash\_\-mask, nlb\_\-affinity\_\-hash\_\-table::hash\_\-random, nlb\_\-affinity\_\-hash\_\-table::hash\_\-table, my\_\-nlb\_\-affinity\_\-hash\_\-table e nlb\_\-affinity::next.

Referenciado por hash\_\-add().\hypertarget{hash-afinidades_8h_b8049b9214af4294d4fcd4fdd29b28e1}{
\index{hash-afinidades.h@{hash-afinidades.h}!hash\_\-init@{hash\_\-init}}
\index{hash\_\-init@{hash\_\-init}!hash-afinidades.h@{hash-afinidades.h}}
\subsubsection[hash\_\-init]{\setlength{\rightskip}{0pt plus 5cm}static void hash\_\-init (void)\hspace{0.3cm}{\tt  \mbox{[}static\mbox{]}}}}
\label{hash-afinidades_8h_b8049b9214af4294d4fcd4fdd29b28e1}


Cria a tabela HASH de afinidade. 



Definido na linha 88 do ficheiro hash-afinidades.h.

Referências nlb\_\-affinity\_\-hash\_\-table::entries, nlb\_\-affinity\_\-hash\_\-table::entry\_\-size, hash\_\-alloc(), nlb\_\-affinity\_\-hash\_\-table::hash\_\-mask, nlb\_\-affinity\_\-hash\_\-table::hash\_\-random, nlb\_\-affinity\_\-hash\_\-table::hash\_\-table, my\_\-nlb\_\-affinity\_\-hash\_\-table e nlb\_\-affinity\_\-hash\_\-table::rwlock.

Referenciado por nlb\_\-init\_\-module().\hypertarget{hash-afinidades_8h_cd0b9a162ec55cddc882ca2070daf745}{
\index{hash-afinidades.h@{hash-afinidades.h}!hash\_\-lookup@{hash\_\-lookup}}
\index{hash\_\-lookup@{hash\_\-lookup}!hash-afinidades.h@{hash-afinidades.h}}
\subsubsection[hash\_\-lookup]{\setlength{\rightskip}{0pt plus 5cm}static struct {\bf nlb\_\-affinity}$\ast$ hash\_\-lookup (u32 $\ast$ {\em client\_\-ip})\hspace{0.3cm}{\tt  \mbox{[}static, read\mbox{]}}}}
\label{hash-afinidades_8h_cd0b9a162ec55cddc882ca2070daf745}


Procura na tabela HASH por uma afinidade entre um cliente e um servidor. 

\begin{Desc}
\item[Parâmetros:]
\begin{description}
\item[{\em client\_\-ip}]IP do cliente \end{description}
\end{Desc}


Definido na linha 209 do ficheiro hash-afinidades.h.

Referências nlb\_\-affinity::client\_\-ip, hash(), nlb\_\-affinity\_\-hash\_\-table::hash\_\-mask, nlb\_\-affinity\_\-hash\_\-table::hash\_\-table, my\_\-nlb\_\-affinity\_\-hash\_\-table, nlb\_\-affinity::next e nlb\_\-affinity\_\-hash\_\-table::rwlock.

Referenciado por nlb\_\-hook\_\-in().\hypertarget{hash-afinidades_8h_28ab4480aefa945c08a4d1f5e16a8d5e}{
\index{hash-afinidades.h@{hash-afinidades.h}!hash\_\-remove\_\-node\_\-affinities@{hash\_\-remove\_\-node\_\-affinities}}
\index{hash\_\-remove\_\-node\_\-affinities@{hash\_\-remove\_\-node\_\-affinities}!hash-afinidades.h@{hash-afinidades.h}}
\subsubsection[hash\_\-remove\_\-node\_\-affinities]{\setlength{\rightskip}{0pt plus 5cm}void hash\_\-remove\_\-node\_\-affinities (struct {\bf cluster\_\-node} $\ast$ {\em node})}}
\label{hash-afinidades_8h_28ab4480aefa945c08a4d1f5e16a8d5e}


Remove todas as afinidades de um servidor Metodo usado na hora de remover um servidor do \hyperlink{structcluster}{cluster}. 

\begin{Desc}
\item[Parâmetros:]
\begin{description}
\item[{\em node}]Servidor do \hyperlink{structcluster}{cluster} \end{description}
\end{Desc}


Definido na linha 235 do ficheiro hash-afinidades.h.

Referências nlb\_\-affinity\_\-hash\_\-table::entries, nlb\_\-affinity\_\-hash\_\-table::hash\_\-mask, nlb\_\-affinity\_\-hash\_\-table::hash\_\-table, my\_\-nlb\_\-affinity\_\-hash\_\-table, nlb\_\-affinity::next e nlb\_\-affinity\_\-hash\_\-table::rwlock.

Referenciado por remove\_\-cluster\_\-node().

\subsection{Documentação das variáveis}
\hypertarget{hash-afinidades_8h_548cda3f82635bd43a0b2b4beeecc8e4}{
\index{hash-afinidades.h@{hash-afinidades.h}!my\_\-nlb\_\-affinity\_\-hash\_\-table@{my\_\-nlb\_\-affinity\_\-hash\_\-table}}
\index{my\_\-nlb\_\-affinity\_\-hash\_\-table@{my\_\-nlb\_\-affinity\_\-hash\_\-table}!hash-afinidades.h@{hash-afinidades.h}}
\subsubsection[my\_\-nlb\_\-affinity\_\-hash\_\-table]{\setlength{\rightskip}{0pt plus 5cm}struct {\bf nlb\_\-affinity\_\-hash\_\-table}  {\bf my\_\-nlb\_\-affinity\_\-hash\_\-table}}}
\label{hash-afinidades_8h_548cda3f82635bd43a0b2b4beeecc8e4}


Tabela HASH para gerenciar a afinidade entre um cliente e um servidor. 



Referenciado por hash(), hash\_\-add(), hash\_\-alloc(), hash\_\-exit(), hash\_\-grow(), hash\_\-init(), hash\_\-lookup() e hash\_\-remove\_\-node\_\-affinities().